package com.SoftwareManage.dao;

import com.SoftwareManage.entity.User;
import com.SoftwareManage.entity.UserRole;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

@Mapper
public interface UserDao {
    //根据用户名查找实体
    User findByUsername(@Param("username") String username);
    //根据用户名查找用户权限
    Set<String> findPermByUsername(@Param("username") String username);
    //根据用户名查找用户角色
    Set<String> getRolesByUsername(@Param("username") String username);
    //获取所有信息
    List<User> selectAll();
    //获取分页后的信息
    List<UserRole> selectAlls(@Param("page") int page,
                              @Param("pageSize") int pageSize);
    //查询
    List<User> search(@Param("username") String username);

    //获取分页后的查询信息
    List<UserRole> searchs(@Param("username") String username,
                           @Param("page") int page,
                           @Param("pageSize") int pageSize);

    //编辑信息
    void update(@Param("id") int id,
                @Param("username") String username,
                @Param("tel") String tel,
                @Param("status") String status,
                @Param("remark") String remark);

    //添加信息
    void add(@Param("username") String username,
             @Param("password") String password,
             @Param("salt") String salt,
             @Param("tel") String tel,
             @Param("status") String status,
             @Param("remark") String remark);

    //删除信息
    void delete(@Param("id") int id);

    //通过ID查找数据
    User findById(@Param("id") int id);

    //查找所有用户名
    List<String> selectAllUsernames();

    //重置密码
    void resetPassword(@Param("id") int id,
                       @Param("password") String password,
                       @Param("salt") String salt);

    //通过用户名查找用户id
    int selectIdByUsername(@Param("username") String username);

    //给用户添加角色
    void setRole(@Param("role_id") int role_id,
                 @Param("user_id") int user_id);

    //用过用户id查找用户角色
    String selectRoleName(@Param("id") int id);

    //通过用户id删除用户角色
    void deleteUserRole(@Param("id") int id);

    //更新用户-角色表中的用户角色
    void updateUserRole(@Param("id") int id,
                        @Param("role_id") int role_id);
}
